Задался вопросом: зачем в хаскеле существует map
, если есть fmap
? map
работает со списками, fmap
-- с
функторами. Но ведь список сам по себе есть функтор! Какова же фундаментальная разница между этими двумя функциями?
Оказывается, почти никакой, просто так исторически сложилось.
В версии Haskell 1.3 fmap
была переименована в map
(логично), и её тип был обобщён для работы с функторами в целом,
а не только со списками. Но в версии 1.4 разделение вернули. Посчитали, что новичкам, изучающим язык, будет сложнее
понять сообщения об ошибках, в которых будут упоминаться функторы, а не списки. Так что map
работает исключительно со
списками, а fmap
, более генерализованно, с любыми функторами.
Так себе решение, если честно. С функторами в процессе изучения хаскелля так или иначе придётся столкнуться, причём довольно рано. Это основополагающая штука, в конце концов! Но зато теперь в языке есть map
и fmap
, а на StackOverflow есть соответствующий вопрос.
А разгадка проста...